#!/bin/sh

if test ! -f /proc/cgroups
then
    echo 'cgroups are not enabled on this kernel.'
    exit 1
fi

case $1 in
    start)
        # Mount system cgroups.
        mount -t tmpfs -o nosuid,nodev,noexec,mode=0755 tmpfs /sys/fs/cgroup
        for i in $(awk '!/^#/{if($4==1){print$1}}' /proc/cgroups)
        do
            mkdir /sys/fs/cgroup/$i
            mount -t cgroup -o nosuid,nodev,noexec,$i cgroup /sys/fs/cgroup/$i
        done
        mkdir /sys/fs/cgroup/systemd
        mount -t cgroup -o nosuid,nodev,noexec,none,name=systemd cgroup /sys/fs/cgroup/systemd
        mkdir /sys/fs/cgroup/unified
        mount -t cgroup2 -o nosuid,nodev,noexec cgroup /sys/fs/cgroup/unified
        mount -o ro,remount /sys/fs/cgroup
        # Setup user cgroups.
        if test -f /etc/lxc/lxc-usernet
        then
            test -f /sys/fs/cgroup/cpuset/cgroup.clone_children && echo 1 > /sys/fs/cgroup/cpuset/cgroup.clone_children
            test -f /sys/fs/cgroup/memory/memory.use_hierarchy  && echo 1 > /sys/fs/cgroup/memory/memory.use_hierarchy
            for i in $(awk '!/^#/{if($1!~"@"){print$1}}' /etc/lxc/lxc-usernet)
            do
                for j in /sys/fs/cgroup/*
                do
                    test $j = /sys/fs/cgroup/unified && continue
                    mkdir -m 0755 -p $j/$i
                    chown -R $i $j/$i
                done
            done
        fi
        ;;
    stop)
        umount -R /sys/fs/cgroup
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: $0 [start|stop|restart]"
        ;;
esac

# End of file
